package com.company.排序.插入排序;

import java.util.Arrays;

/**
 * @author gyhstart
 * @create 2021/5/13 - 0:05
 *
 * 插入排序:外层循环控制每次索要插入的元素（定义一个待插入的数），再定义一个待插入数的前一个数的下标，内层循环比较插入数字
 * 与前一个数字之间的大小比较，如果待插入数的前一个数大于本次索要插入的元素，那么将前一个元素的值赋值给本次插入值的位置，
 * 继续向前比较，知道找到前面的元素之都比插入元素值小的位置，在跳出内层循环，执行外层循环。
 **/
public class Sort {
    public static int[] insertSort(int arr[]) {
        for (int i = 0; i < arr.length; i++) {
            //定义待插入的数
            int insertVal = arr[i];
            //找到待插入数的前一个数的下标
            int insertIndex = i - 1;
            while (insertIndex >= 0 && arr[insertIndex] > insertVal) {
                arr[insertIndex + 1] = arr[insertIndex];
                insertIndex--;
            }
            arr[insertIndex + 1] = insertVal;
        }
        return arr;
    }

    public static void main(String[] args) {
        int arr[] = {3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48};
        int[] insertSort = insertSort(arr);
        System.out.println("Arrays.toString(insertSort) = " + Arrays.toString(insertSort));
    }
}
